Skip to content

0.0.9: исправления по стандарту 1С:DirectBank 2.2.2 - #24

Merged
EgorGruzdev merged 12 commits into
masterfrom
fix/0.0.9
Sep 22, 2026
Merged

EgorGruzdev merged 12 commits into
masterfrom
fix/0.0.9

Conversation

@EgorGruzdev

Copy link
Copy Markdown
Contributor

Исправления по сверке с описанием стандарта 1С:DirectBank 2.2.2 — milestone 0.0.9.

Главное: официальный пример выписки из описания стандарта раньше не разбирался (TypeError на Stamp::$Branch), GetPackList отправлял дату не в том формате, а клиент переставал работать после истечения сессии.

Транспорт

Разбор документов

Тесты и CI

  • настройка handler в Client и офлайн-тесты Client на MockHandler; тесты стенда банка в группе bank-stand — Тесты: официальные примеры XML и офлайн-тесты Client #10
  • в фикстурах официальные примеры 1С, выписка только с обязательными элементами и выписка со всеми видами PayDoc; все проходят XSD
  • GitHub Actions: PHP 8.0–8.5 × Guzzle 7/8, все 12 комбинаций зелёные — CI: GitHub Actions #11

Несовместимые изменения

  • ErrorType::getCode() возвращает string вместо int
  • CheckType::getDetails() возвращает массив DetailsType[] вместо ?DetailsType
  • при HTTP 4xx/5xx вместо исключения Guzzle (GuzzleHttp\Exception\BadResponseException) выбрасывается ClientException / UnexpectedResponseException
  • геттеры необязательных полей возвращают null: Stamp::getBranch(), StatementData::getStamp(), Packet::getUserAgent(), StatementRequest::getUserAgent()

Closes #10
Closes #11

ErrorType::getCode() возвращает string. ClientException::getBankCode()
и getError() отдают код и ошибку из ответа банка как есть.

Closes #9
…ёт понятное исключение

Guzzle больше не бросает исключение на 4xx/5xx (http_errors = false):
тело ResultBank разбирается всегда, и ошибка банка приходит как
ClientException с кодом банка. Ответ без ResultBank, не-XML или без
ожидаемых данных даёт UnexpectedResponseException (наследник
ClientException) с HTTP-ответом.

Closes #5
При 1006 «Сессия закрыта по тайм-ауту» и 1007 «Некорректный
идентификатор сессии» клиент сбрасывает SID, выполняет Logon и
повторяет запрос один раз.

Closes #4
…xml разбирается

- Stamp::$Branch, StatementData::$Stamp, GetPacketListResponseType::$TimeStampLastPacket,
  StatementRequest::$userAgent стали nullable, геттеры тоже
- значения по умолчанию для nullable-свойств DetailsType, PayRequestApp, PaymentOrder
- Packet::getUserAgent() возвращает ?string, DocumentType::isTestOnly() и
  соседние флаги без атрибута возвращают false
- GetPacketListResponseType::getTimeStampLastPacket()
- в тестах официальные примеры 1С (Statement.xml, StatementRequest.xml)
  и выписка только с обязательными элементами

Closes #6
…::$Details

- в контейнере может быть несколько Document: getDocuments(), setDocuments(),
  addDocument(); getDocument() и setDocument() работают с первым документом
- CheckType::getDetails() возвращает массив DetailsType[]
- в тестах выписка со всеми вариантами PayDoc

Closes #7
…, userAgent выписки, статус в штампе

- PayDoc::getInnerDoc() возвращает InnerDocType с InnerDocKind
- Document/Data с атрибутами fileName и contentType больше не ломает разбор:
  DocumentType::getFileName(), getContentType(), setData() с атрибутами
- DocumentType::getSignatures(), addSignature(), класс SignatureType
- Statement::getUserAgent()
- Stamp::getStatus() и геттеры StatusType: статус разбирался, но был недоступен
- в тестах пример контейнера с подписью из описания транспортного протокола

Closes #8
@EgorGruzdev EgorGruzdev added this to the 0.0.9 milestone Sep 22, 2026
@EgorGruzdev
EgorGruzdev merged commit 71b84db into master Sep 22, 2026
12 checks passed
@EgorGruzdev
EgorGruzdev deleted the fix/0.0.9 branch September 22, 2026 21:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CI: GitHub Actions Тесты: официальные примеры XML и офлайн-тесты Client

1 participant